<?php

namespace App\Http\Controllers\Admin;

use App\Events\AdminLogin;
use App\Http\Requests\Admin\LoginRequest;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\Role;
use App\Models\AdminRole;

class LoginController extends Controller
{
//	use AuthenticatesLogout;
	use AuthenticatesUsers;
//	{
//    	AuthenticatesLogout::logout insteadof AuthenticatesUsers;
//	}

	//登录后跳转的链接
	protected $redirectTo = '/admin/index/index';

	public function __construct(){
		//在guest中间件过滤 如果已经登录过的用户，就跳转到后台首页
		$this->middleware('guest:admin',['except'=>['logout']]);
	}

	/**
	 * 显示登录页面
	 * User: ihome
	 * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
	 */
	public function showLoginForm()
	{
		$captcha_status = \App\Models\WebConfig::query()->where('id',11)->value('value');

		return view('admin.login.index',compact('captcha_status'));
	}

	/**
	 * 登录
	 * User: ihome
	 */
	public function login(LoginRequest $request,Role $roleModel)
	{
		$data = $request->except(['_token','captcha']);

		if(Auth::guard('admin')->attempt($data)){
			/*if(Auth::id() == '1'){
				//超级管理员直接去获得所有菜单
				$roleModel->getRoleMenu();
			}else{
				//登录成功后，取出用户的所有权限列表 放入到缓存
				//验证是否有权访问某个链接
				//获得用户的所有角色
				$roleIds = AdminRole::query()
					->select(\DB::raw('GROUP_CONCAT(role_id) as role_ids'))
					->where('admin_id',\Auth::guard('admin')->id())
					->firstOrFail()
					->toArray();

				//如果用户的角色中，包含超级管理员，也直接去获取所有的菜单列表
				if(in_array('1',$roleIds['role_ids'])){
					$roleModel->getRoleMenu();
				}

				//缓存用户角色id
				cache(['role_ids'=>$roleIds['role_ids']],86400);

				$roleModel->updatePermissionCache(explode(',',$roleIds['role_ids']));
			}*/

			if(\auth('admin')->user()->status == 0){
				Auth::guard('admin')->logout();
				return redirect()->route('admin.login')->with('danger','该用户已锁定');
			}

			//触发事件
			event(new AdminLogin(auth('admin')->user()));

			//后台权限已交由中间件处理
			return redirect()->route('admin.index.index');
		}else{
			return redirect()->back()->with('danger','用户名或密码错误')->withInput();
		}
	}

	/**
	 * 将指定守卫传给auth组件
	 * User: ihome
	 * @return \Illuminate\Contracts\Auth\Guard|\Illuminate\Contracts\Auth\StatefulGuard|mixed
	 */
	protected function guard()
	{
		return Auth::guard('admin');
	}

	// 退出后跳转页面
	protected function loggedOut(Request $request)
	{
		//清空所有的缓存
		\Cache::forget('role_ids');
		\Cache::forget('permissionList');
		\Cache::forget('menu');

		return redirect(route('admin.login'));
	}
}
